home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene 96
/
Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso
/
misc
/
coding
/
cp2dekit
/
samples
/
binfarc.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1996-12-29
|
1KB
|
72 lines
//***************************************************************************
//
// this file is (c) '94-'96 Niklas Beisert
//
// this file is part of the cubic player development kit.
// you may only use/modify/spread this file under the terms stated
// in the cubic player development kit accompanying documentation.
//
//***************************************************************************
#include "binfile.h"
abinfile::abinfile()
{
}
int abinfile::open(binfile &fil, long ofs, long len)
{
close();
int fmode=fil.getmode()&~canchsize;
if (!fmode||!(fmode&canseek))
return 0;
f=&fil;
fofs=ofs;
filelen=len;
filepos=0;
long l=f->length();
if (fofs>l)
fofs=l;
if ((fofs+filelen)>l)
filelen=l-fofs;
mode=fmode;
return 1;
}
long abinfile::read(void *buf, long len)
{
if (!(mode&canread))
return 0;
if ((filepos+len)>filelen)
len=filelen-filepos;
f->seek(fofs+filepos);
len=f->read(buf, len);
filepos+=len;
return len;
}
long abinfile::write(const void *buf, long len)
{
if (!(mode&canwrite))
return 0;
if ((filepos+len)>filelen)
len=filelen-filepos;
f->seek(fofs+filepos);
len=f->write(buf, len);
filepos+=len;
return len;
}
long abinfile::seek(long pos)
{
if (!(mode&canseek))
return filepos;
if (pos<0)
pos=0;
if (pos>filelen)
pos=filelen;
filepos=pos;
return filepos;
}